package packet

import "hy_808/protocol/hygprs"

/*
通讯服务器响应

+0  a0 00 1e 02 00 01 aa
+7  01 00 00 00 34
+12 02 00 00 a0 a1
+17 04 01 01 01 01
+22 06 47 84 3a 90
+27 1a 01 应答信息 1:收到正确 0:收到错误,需要重新发送
+29 xx xx xx xx a1
+34
*/
type CommAnswer struct {
	hygprs.Fields
}

func (p CommAnswer) Answer() byte {
	return p.Data[28]
}

/*
应答包
指定类型的包或者0x1a字段不为0时，需要返回应答包
应答包中的0x06字段
	一般情况下是原包中的时间
	当0x1a为1，0x80 0x83 0x12，使用的是当前时间
	当0x1a为2，使用的是原包中的时间
*/
// 应答
func Answer(f hygprs.Fields, t byte) []byte {
	b := make([]byte, 0, 34)
	b = append(append(b, 0x01), hygprs.FromUint32(f.LineID())...)
	b = append(append(b, 0x02), hygprs.FromUint32(f.BusID())...)
	b = append(append(b, 0x04), hygprs.FromUint32(f.OperatorID())...)
	b = append(append(b, 0x06), hygprs.FromUint32(f.Unix())...)
	b = append(b, 0x1a, 1)
	return hygprs.PackPackage(0xa0, t, f.SerialNumber, b)
}

// 当收到的包指定需要应答时应答
func GenAnswer(f hygprs.Fields) CommAnswer {
	data := Answer(f, 0xaa)
	return CommAnswer{hygprs.MakeFields(hygprs.MakePacket(data))}

}
